﻿//이미지 로딩 LoadImg.as 클래스 선언 ver 2.0

import flash.display.*;

class LoadImg {

	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////속성선언

	private var loader:MovieClipLoader;
	private var blankImageBox:MovieClip;
	private var listener:Object;
	private var objectPath:LoadImg;
	public var totalLoadedCount:Number;

	public function LoadImg() {
		this.objectPath = this;
		this.totalLoadedCount = 0;
	}

	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////loadImgs 메소드 정의

	public function loadImgs(_targetClip:MovieClip, _urlString:String, _imgWidth:Number, _imgHeight:Number, _eventTarget:MovieClip, _selectNum:Number, _pngFileInput:Boolean):Void {

		//지역변수 정의
		//eventTarget은 로딩시 필요한 로딩바나 기타 로딩텍스트가 생성이될 무비클립을 의미합니다.

		var targetClip:MovieClip = _targetClip;
		var urlString:String = _urlString;
		var imgWidth:Number = _imgWidth;
		var imgHeight:Number = _imgHeight;
		var eventTarget:MovieClip = _eventTarget;
		var selectNum:Number = _selectNum;
		var pngFileInput:Boolean = _pngFileInput;
		var objectPath:LoadImg = this.objectPath;

		//타겟 무비클립안에 blankImageBox 라는 인스턴스네임을 가진 빈무비클립을 최상의 depth에 생성합니다
		blankImageBox = targetClip.createEmptyMovieClip("blankImageBox", targetClip.getNextHighestDepth());

		//이벤트 타겟은 반드시 정의 되야 한다 안되면 함수종료     
		if (eventTarget == undefined) {
			return;
		}
		//리스너 오브젝트 선언                                                                  
		listener = new Object();

		//리스너 오브젝트의 속성 tmc 정의 
		listener.tmc = targetClip;

		// 로딩을 시작할 때 실행됩니다
		listener.onLoadStart = function(mc:MovieClip) {

			//selectNum이 1이라면 텍스트 로딩 형태를 취합니다.
			//selectNum이 2라면 퍼센트없는 로딩바 형태를 취합니다.
			//selectNum이 3이라면 일반형태의 루핑로딩클립 형태를 취합니다.
			if (selectNum == 1) {
				objectPath.textEventStart(mc,eventTarget);
			} else if (selectNum == 2) {
				objectPath.loadingBarEventStart(mc,eventTarget);
			} else if (selectNum == 3) {
				objectPath.loopingLoadEventStart(mc,eventTarget);
			}
		};

		// 로딩 중에 실행됩니다.
		listener.onLoadProgress = function(mc:MovieClip, loadedBytes:Number, totalBytes:Number) {

			if (selectNum == 1) {
				objectPath.textEventProcess(mc,loadedBytes,totalBytes,eventTarget);
			} else if (selectNum == 2) {
				objectPath.loadingBarEventProcess(mc,loadedBytes,totalBytes,eventTarget);
			} else if (selectNum == 3) {
				objectPath.loopingLoadEventProcess(mc,eventTarget);
			}
		};

		// 로딩 완료 후에 실행됩니다.
		listener.onLoadInit = function(mc:MovieClip) {

			if (selectNum == 1) {
				objectPath.textEventEnd(mc,eventTarget,targetClip,imgWidth,imgHeight);
			} else if (selectNum == 2) {
				objectPath.loadingBarEventEnd(mc,eventTarget,targetClip,imgWidth,imgHeight);
			} else if (selectNum == 3) {
				objectPath.loopingLoadEventEnd(mc,eventTarget,targetClip,imgWidth,imgHeight);
			}
			if (pngFileInput == false) {
				//투명미처리--------------이미지 각도회전시 일그러짐을 방지 하지만 png 파일을 불러올수 없습니다.    
				mc._visible = false;
				var bitmap:BitmapData = new BitmapData(mc._width, mc._height, true);
				this.tmc.attachBitmap(bitmap,this.tmc.getNextHighestDepth(),"auto",true);
				bitmap.draw(mc);
			} else if (pngFileInput == true) {
				//투명처리-----------------png 파일을 불러 오기 위해서는 이방식을 씁니다.
				mc._visible = true;
			}

		};
		loader = new MovieClipLoader();
		loader.addListener(listener);
		loader.loadClip(urlString,blankImageBox);
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 텍스트 퍼션트 로딩시

	//selectNum=1 인경우


	//로딩 시작시 호출 되는 메소드
	public function textEventStart(mc:MovieClip, eventTarget:MovieClip):Void {
		eventTarget.createTextField("titletext",5,0,0,0,0);
		eventTarget.loadingFormat = new TextFormat();
		eventTarget.loadingFormat.font = "돋움";
		eventTarget.loadingFormat.size = 10;
		eventTarget.loadingFormat.bold = false;
	}
	//로딩 진행시 호출 되는 메소드
	public function textEventProcess(mc:MovieClip, loadedBytes:Number, totalBytes:Number, eventTarget:MovieClip):Void {
		//지역변수 정의
		var loadingNum:Number = loadedBytes/totalBytes*100;
		eventTarget.titletext.type = "dynamic";
		eventTarget.titletext.textColor = 0x000000;
		eventTarget.titletext.embedFonts = true;
		eventTarget.titletext.selectable = false;
		eventTarget.titletext.autoSize = "center";
		eventTarget.titletext._quality = "BEST";
		eventTarget.titletext.antiAliasType = "none";
		eventTarget.titletext.text = "Loading Data : "+Math.floor(loadingNum)+"%";//기존의 값에서 수정했습니다. 이래야 정상적으로 카운팅이 제대로 올라갑니다.
		eventTarget.titletext.setTextFormat(eventTarget.loadingFormat);
		trace("loadingNum="+eventTarget.titletext.text);
	}
	//로딩이 완료되면 호출되는 메소드
	public function textEventEnd(mc:MovieClip, eventTarget:MovieClip, targetClip:MovieClip, imgWidth:Number, imgHeight:Number):Void {

		//생성했던 텍스트필드 삭제
		eventTarget.titletext.removeTextField();
		eventTarget._visible = false;
		//로딩후 이미지 사이즈 결정
		targetClip.blankImageBox._width = imgWidth;
		targetClip.blankImageBox._height = imgHeight;

		//로딩해야할 이미지가 다수일경우 즉 각각의 로딩체크가 아닌 전체 이미지가 모두 로딩 됐다면 이라는 프로세스 가정이 들어갈 경우 
		//다수의 이미지로딩을 모두 체크해야할 필요가 생길 경우 
		this.totalLoadedCount++;

		trace("this.totalLoadedCount="+this.totalLoadedCount);

	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 로딩바 로딩시

	//selectNum=2 인경우

	//로딩 시작시 호출 되는 메소드
	public function loadingBarEventStart(mc:MovieClip, eventTarget:MovieClip):Void {

		eventTarget.loadingBarModule._visible = true;
		eventTarget.loadingBarModule.bar._width = 1;

	}
	//로딩 진행시 호출 되는 메소드
	public function loadingBarEventProcess(mc:MovieClip, loadedBytes:Number, totalBytes:Number, eventTarget:MovieClip):Void {

		var loadingNum:Number = loadedBytes/totalBytes*100;
		eventTarget.loadingBarModule.bar._width = Math.floor(loadingNum);
		trace("eventTarget.loadingBarModule.bar._width="+eventTarget.loadingBarModule.bar._width);

	}
	//로딩이 완료되면 호출되는 메소드
	public function loadingBarEventEnd(mc:MovieClip, eventTarget:MovieClip, targetClip:MovieClip, imgWidth:Number, imgHeight:Number):Void {

		eventTarget.loadingBarModule.bar._width = 100;
		eventTarget._visible = false;

		//로딩후 이미지 사이즈 결정 
		targetClip.blankImageBox._width = imgWidth;
		targetClip.blankImageBox._height = imgHeight;

		//로딩해야할 이미지가 다수일경우 즉 각각의 로딩체크가 아닌 전체 이미지가 모두 로딩 됐다면 이라는 프로세스 가정이 들어갈 경우 
		//다수의 이미지로딩을 모두 체크해야할 필요가 생길 경우 
		this.totalLoadedCount++;

	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 일반루핑로딩모듈 로딩시

	//selectNum=3 인경우

	//로딩 시작시 호출 되는 메소드
	public function loopingLoadEventStart(mc:MovieClip, eventTarget:MovieClip):Void {

		eventTarget.loopLoadingModule._visible = true;
		eventTarget.loopLoadingModule.gotoAndStop(1);

	}
	//로딩 진행시 호출 되는 메소드
	public function loopingLoadEventProcess(mc:MovieClip, eventTarget:MovieClip):Void {

		eventTarget.loopLoadingModule._visible = true;
		eventTarget.loopLoadingModule.play();

	}
	//로딩이 완료되면 호출되는 메소드
	public function loopingLoadEventEnd(mc:MovieClip, eventTarget:MovieClip, targetClip:MovieClip, imgWidth:Number, imgHeight:Number):Void {

		eventTarget._visible = false;

		//로딩후 이미지 사이즈 결정
		targetClip.blankImageBox._width = imgWidth;
		targetClip.blankImageBox._height = imgHeight;

		//로딩해야할 이미지가 다수일경우 즉 각각의 로딩체크가 아닌 전체 이미지가 모두 로딩 됐다면 이라는 프로세스 가정이 들어갈 경우 
		//다수의 이미지로딩을 모두 체크해야할 필요가 생길 경우 
		this.totalLoadedCount++;

	}
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

}